#ifndef __ELIPSE_H__
#define __ELIPSE_H__

#define DEFAULT_ELIPSE_SPEED 9
#define DEFAULT_SHOOT_SPEED 5
#define DEFAULT_SHOOTS_QUANTITY 10

#include "Shape.h"
#include "Rectangle.h"
#include "Circle.h"


class Elipse : public Shape {

	private:
		int verticalRadius;
		int horizontalRadius; //este puede ir cambiando a medida que se expande / contrae
		int originalHRadius; // este es siempre el original
		Point* posicion;
	    Point* speed;
		SDLDrawManager manager;
	    SDLDrawElement SDLElem;
	    char pTexture[100];
	    int r,g,b;

		Point* colitionPoint;
		
		// Es la misma elipse la que encapsula un disparo.
		// Esto es x dos cosas, una que solo puede haber un disparo a la vez
		// y la otra es que simplifica el ubicar el disparo para hacer 
		// la comparacion contra todos los ladrillos
		Rectangle* theShoot; 
		int shoots; //cantidad de disparos disponibles
		
		bool glue ; //indica si la bola esta pegada a la elipse
		bool hasEatedGlue ; //indica que la ultima pastilla que se comio fue un pegamento
	
		bool firstAction; //indica si es la primera accion, para quitarle el glue
	public:
		Elipse(); // Constructor.
		virtual ~Elipse(); // Destructor.

		// GET y SET para cada atributo.
	
		void setShoots(int shots);
		int getShoots();

		void setTheShoot(Rectangle* theShoot);
		Rectangle* getTheShoot();

		void setGlue(bool glueActivated);

		bool getGlue();

		void setFirstAction(bool act);
		bool getFirstAction();

		void setHasEatedGlue(bool b);

		bool getHasEatedGlue();

		void setVerticalRadius(int newRadius);

		int getVerticalRadius();
		
		void setHorizontalRadius(int newRadius);

		int getHorizontalRadius();

		void setOriginalHRadius(int newRadius);

		int getOriginalHRadius();

	    void setPosicion(Point* point);

		Point* getPosicion();

	   	void draw(SDL_Surface *screen);
		
		void drawTexture(SDL_Surface * auxSurface, int thickness);

		int serialize(Element* elem);

		void hydrate(Element* elem);

		void fillColor(SDL_Surface *screen, int thickness);

		void fillThickness(SDL_Surface *screen, int thickness);

		void collide(Shape* shape, Point* puntoChoque);

		void update();

		Point* getSpeed();
		void setSpeed(Point* speed);

		Point* getColitionPoint();
		void setColitionPoint(Point* nuevoColitionPoint);

		void createTheShoot();
		void destroyTheShoot();

		
};



#endif __ELIPSE_H__